/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package caintra.Sapra.Pantalla.Dispersion;

import caintra.Sapra.ComponentsImplements.BotonCaintra;
import caintra.Sapra.ComponentsImplements.LabelCaintra;
import caintra.Sapra.ComponentsImplements.SelectFieldCaintra;
import caintra.Sapra.ComponentsImplements.TableCaintra;
import caintra.Sapra.ComponentsImplements.TextFieldCaintra;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import echopointng.ContainerEx;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.list.DefaultListModel;
import org.sapra.dao.BanorteCuentas;

/**
 *
 * @author Luiz
 */
public class Dispersion_Detalle extends ContentPane implements ActionListener{

    public DispersionController vista;
    public List<PrefacturaDetalle> practicantes;
    public LabelCaintra lb_empresas,lb_cuenta,lb_tarjeta,lb_mensaje,lb_cantidad_dispersion,lb_cantidad_total;
    public TextFieldCaintra txt_cuenta,txt_tarjeta;
    public BotonCaintra bt_guardar,bt_eliminar;
    public SelectFieldCaintra sel_empresa;
    public TableCaintra table_practicante;
    public ArrayList<PrefacturaCaintra> empresa_total;
    public List<PrefacturaDetalle> lista_practicante;
    public int longitud=0;
    public PrefacturaCaintra pref_seleccionada;
    public ArrayList<PrefacturaDetalle> lista_practicante_emp;

    public void init_components(){
        try {
            lb_empresas=new LabelCaintra("Empresa : ", Color.BLACK);
            lb_cuenta=new LabelCaintra("Num. Cuenta : ", Color.BLACK);
            lb_tarjeta=new LabelCaintra("Num. Tarjeta : ", Color.BLACK);
            lb_mensaje=new LabelCaintra(" MSJ??? ", Color.BLACK);
            lb_cantidad_dispersion=new LabelCaintra("Neto Total a Dispersar : ", Color.BLACK);
            lb_cantidad_total = new LabelCaintra("$ 0.00 ", Color.BLACK);

            txt_cuenta=new TextFieldCaintra(250, longitud);
            txt_tarjeta=new TextFieldCaintra(250, 16);

            bt_guardar=new BotonCaintra("guardar_cuenta.png","ok_cuenta");
            sel_empresa = new SelectFieldCaintra("sel_empresa", 400);
            table_practicante=new TableCaintra("sel_pract", 500);
        } catch (Exception e) {
        }
    }
    public void design_sheet(){
        Grid g=new Grid(1);
        ContainerEx cx=new ContainerEx();
        ContentPane p1=new ContentPane();

        ContainerEx cx2=new ContainerEx();
        ContentPane p2=new ContentPane();

        Column col1=new Column();
        try {

        //p1.add(tb_empresa_disponible);

        
        g.add(cx);

        Row r1=new Row();
        r1.add(lb_empresas);
        r1.add(sel_empresa);

        Row r2=new Row();
        r2.add(lb_cantidad_dispersion);
        r2.add(lb_cantidad_total);

        Row r3=new Row();
        r3.add(lb_cuenta);
        r3.add(txt_cuenta);

        //Row r4=new Row();
        //r4.add(lb_tarjeta);
        //r4.add(txt_tarjeta);

        col1.add(r1);
        col1.add(r2);
        col1.add(r3);
        //col1.add(r4);
        col1.add(bt_guardar);
        col1.add(lb_mensaje);
        lb_mensaje.setVisible(false);
        col1.setInsets(new Insets(20, 10, 0, 0));

        cx.setWidth(new Extent(620));
        cx.setHeight(new Extent(150));
        p1.add(col1);
        cx.add(p1);


        p2.add(table_practicante);//p2.add(table_practicante);
        cx2.setWidth(new Extent(620));
        cx2.setHeight(new Extent(250));
        cx2.add(p2);
        g.add(cx2);
        this.add(g);
        sel_empresa.addActionListener(this);
        table_practicante.addActionListener(this);
        bt_guardar.addActionListener(this);
        } catch (Exception e) {
        }

    }
    public void execute(){
        try {
            lista_practicante= this.vista.query.practicante_dispersion(empresa_total);
            if(lista_practicante == null || lista_practicante.isEmpty()){
                    this.vista.dp_view.detail_window.userClose();
                    this.vista.mensaje_error("No Existen Practicantes para las empresas");
                    return;
            }
            bt_guardar.setVisible(false);
            sel_empresa.setModel(new DefaultListModel(empresa_total.toArray()));
            
            sel_empresa();
        } catch (Exception e) {

        }

    }



    public void mensaje(String msj,boolean ok){
            lb_mensaje.setVisible(true);
            lb_mensaje.setText(msj);
            lb_cuenta.setText("");
            if(ok) lb_mensaje.setForeground(Color.GREEN);
            else  lb_mensaje.setForeground(Color.RED);

    }
    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("ok_cuenta")){   ok_cuenta(); }
        if(e.getActionCommand().equals("sel_empresa")){  sel_empresa();  }
        if(e.getActionCommand().equals("sel_pract")){}
    }
    SimpleDateFormat formato=new SimpleDateFormat("yyyy-MM-dd");
    public void ok_cuenta(){
        String cuenta="";
        long number=0;
        PrefacturaDetalle p;
        try {
            
            
            if(table_practicante.getSelectionModel().isSelectionEmpty()){
                    mensaje("Favor de seleccionar un practicante",false);
                    return;
            }
            cuenta=txt_cuenta.getText();
            p=(PrefacturaDetalle)lista_practicante_emp.get(table_practicante.getSelectionModel().getMinSelectedIndex());
            
            if(cuenta != null && ! cuenta.trim().equals("")){
                cuenta=cuenta.trim();
                try {
                    number=Long.parseLong(cuenta);
                    if(number == 0){
                        this.vista.query.actualizaCuenta("", p.getPracticante_Id());
                        mensaje("Cuenta Actualizada Correctamente", true);
                        execute();
                        sel_empresa();
                        return;
                    }
                } catch (Exception e) {
                    mensaje("La cuenta solo acepta numeros",false);
                    return;    
                }
                if(cuenta.length() == longitud){
                    List<BanorteCuentas> cuentas;
                    BanorteCuentas bc;
                    cuentas = this.vista.query.getCuenta(1, cuenta);
                    if(cuentas == null || cuentas.isEmpty()){

                    }else{
                        for(int i=0;i<cuentas.size();i++){
                                                bc=(BanorteCuentas)cuentas.get(i);
                                                if((p.getNombre().toLowerCase().trim().equals(bc.getNombre().toLowerCase().trim()) &&
                                                        p.getPaterno().toLowerCase().trim().equals(bc.getPaterno().toLowerCase().trim()) &&
                                                        p.getMaterno().toLowerCase().trim().equals(bc.getMaterno().toLowerCase().trim())
                                                        || (formato.format(p.getFec_nacimiento()).equals(formato.format(bc.getFec_nacimiento()))))){
                                                }else{
                                                        mensaje("Ya existe una cuenta igual",false);
                                                        return;
                                                }
                                            }
                    }
                    
                    
                    cuentas = this.vista.query.getPract_Cuenta(p);


                    //this.vista.query.actualizaCuenta(cuenta, p.getPracticante_Id());
                    boolean flag=this.vista.query.actualizaCuenta(cuentas, cuenta,pref_seleccionada.getPeriodoId() );
                    if(flag)
                        mensaje("Cuenta Actualizada Correctamente", true);
                    else
                        mensaje("Error al actualizar cuenta", false);
                    execute();
                    sel_empresa();
                    //mensaje("Cuenta Actualizada Correctamente", true);
                    return;
                }else{
                    mensaje("Longitud de cuenta debe ser de " + longitud + " caracteres",false);
                    return;
                }
            }else{
                mensaje("Favor de escribir una cuenta",false);
                return;
            }
        } catch (Exception e) {
        }

    }
    public void sel_empresa(){
        PrefacturaDetalle pd;
        if(sel_empresa.getSelectionModel().isSelectionEmpty())
            return;

        pref_seleccionada=(PrefacturaCaintra)sel_empresa.getSelectedItem();
        double neto=0.0;
        try {
            lb_cuenta.setText("");
            if(pref_seleccionada == null){
                    mensaje("Error al cargar la empresa",false);
                    return;
            }
            lista_practicante_emp=new ArrayList<PrefacturaDetalle>();

            for(int i=0;i<lista_practicante.size();i++){
                    pd=(PrefacturaDetalle)lista_practicante.get(i);
                    if(pd.getFk_prefacturaId() == pref_seleccionada.getPrefacturaId()){
                        lista_practicante_emp.add(pd);
                        neto+= pd.getNeto();
                    }
                        
            }
            lb_cantidad_total.setText(""+table_practicante.fix_Double(neto));
            table_practicante.setLista_Pract_Dispersion(lista_practicante_emp);
            bt_guardar.setVisible(true);

        } catch (Exception e) {
        }

    }

    public Dispersion_Detalle(DispersionController vista) {
            this.vista=vista;
            switch(this.vista.bank.getbancoId()){
                case 1:longitud=9;break;//banorte
                case 2:longitud=10;break;//bancomer
                case 3:longitud=17;break;//hsbc
                default:longitud=0;break;
            }
            this.empresa_total=this.vista.empresa_total;
            init_components();
            design_sheet();
            execute();
            this.setBackground(new Color(229, 229, 228));

    }

    
    



}
